package com.wf.controller;

import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.wf.constant.RedisConstant;
import com.wf.context.BaseContext;
import com.wf.service.HousesInfoService;
import com.wf.utils.RedisUtil;
import com.wf.vo.HouseDetailsVO;
import com.wf.vo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.*;

import java.time.Duration;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.time.LocalDateTime;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 历史记录
 * 用于处理与房源历史记录相关的请求
 * @author mpk
 * @since 2024/8/27 19:18:26
 */
@CrossOrigin
@RestController
@RequestMapping("/app/history")
@Slf4j
public class HistoryController {

    // 自动注入房源信息服务
    @Autowired
    HousesInfoService housesInfoService;

    // 自动注入Redis操作工具类
    @Autowired
    RedisUtil redisUtil;

    /**
     * 获取当前用户的历史浏览记录
     *
     * @return 包含历史记录的Result对象
     */
    @GetMapping("/get")
    public Result getHistory() {
        // 从Redis中获取倒序排列的浏览记录集合
        Set<ZSetOperations.TypedTuple> set = redisUtil.zReverseRangeWithScores(
                RedisConstant.APARTMENT_HISTORY_LIST + BaseContext.getCurrentId());

        // 将集合转换为列表，并添加创建日期字段
        List<HouseDetailsVO> list = set.stream().map(
                item -> {
                    HouseDetailsVO houseDetailsVO = (HouseDetailsVO) item.getValue();
                    if (houseDetailsVO != null) {
                        houseDetailsVO.setCreateDate(LocalDateTimeUtil.of(item.getScore().longValue()));
                    }
                    return houseDetailsVO;
                }
        ).collect(Collectors.toList());

        // 返回成功结果，携带历史记录列表
        return Result.success(list);
    }

//    /**
//     * 新增历史记录
//     *
//     * @param contractId 房源合同ID
//     */
//    @PostMapping("/insert/{contractId}")
//    public void insertHistory(@PathVariable String contractId) {
//        // 获取房源详情
//        HouseDetailsVO detail = housesInfoService.getHouseDetail(contractId);
//
//        // 更新或记录房源的浏览计数
//        if (redisUtil.hasKey(RedisConstant.APARTMENT_HOUSE_VIEW_COUNT + contractId)) {
//            redisUtil.incr(RedisConstant.APARTMENT_HOUSE_VIEW_COUNT + contractId, 1);
//        } else {
//            redisUtil.set(RedisConstant.APARTMENT_HOUSE_VIEW_COUNT + contractId, 1);
//        }
//
//        // 将房源详情添加到当前用户的历史记录中，使用当前时间戳作为分数
//        redisUtil.zSet(RedisConstant.APARTMENT_HISTORY_LIST + BaseContext.getCurrentId(), detail,
//                LocalDateTimeUtil.toEpochMilli(LocalDateTime.now()));
//    }

    /**
     * 清空当前用户的所有历史记录
     */
    @DeleteMapping("/clear")
    public void clearHistory() {
        // 构造历史记录的Redis键
        String key = RedisConstant.APARTMENT_HISTORY_LIST + BaseContext.getCurrentId();

        // 删除用户的历史记录
        redisUtil.del(key);
    }
}
